package com.hobbit.analyze.base
{
	import com.hobbit.utils.Priority;
	
	import flash.utils.ByteArray;

	/**
	 * 加载项 
	 * @author 晓晔
	 * 
	 */
	public class LoadItem
	{
		//param
		//------public
		/**
		 *	要加载的文件地址 
		 */
		public var url:String;
		/**
		 *	 加载项名称
		 */
		public var id:String;
		/**
		 *	加载项id
		 */
		public var name:String;
		/**
		 *	此加载项是否是索引表 或其他
		 */
		public var other:String;
		/**
		 * 该项加载状态
		 * <br>通过LoadItem中的静态常量定义 
		 */
		public var status:String;
		/**
		 *  加载项文件类型
		 * <br>通过LoadItem中的静态常量定义
		 */
		public var type:String;
		/**
		 * 加载项解析完成后的二进制数据
		 */
		public var data:ByteArray;
		/**
		 * 加载项解析完成后的对象 
		 */
		public var result:Object;
		/**
		 * 加载项文件大小(kb)
		 */
		public var size:int;
		/**
		 * 加载组名称 
		 */
		public var groupName:String = "";
		//-----private
		private var _priority:int;
		private var _startTime:int;
		private var _endTime:int;
		// callback list
		/**
		 *	 加载完成后的回调
		 */
		private var _completeFuncList:Vector.<Function> = new Vector.<Function>();
		
		
		public function LoadItem(url:String,name:String,type:String = "swf",priority:int = 2,completeFunc:Function=null,size:int = 0)
		{
			this.url = url;
			this.name = name;
			this.size = size;
			this.type = type;
			this.priority = priority;
			registerCompleteFunc(completeFunc);
		}
		
		/**
		 * 注册一个该项加载完成后的回调 
		 * @param func
		 * 
		 */		
		public function registerCompleteFunc(func:Function):void
		{
			if(_completeFuncList!=null && func != null)
			{
				_completeFuncList.push(func);
			}
		}
		
		/**
		 * 移除一个加载完成后的回调 
		 * @param func
		 * 
		 */		
		public function removeCompleteFunc(func:Function):void
		{
			var index:int = _completeFuncList.indexOf(func);
			if(index != -1)
			{
				_completeFuncList.splice(index,1);
			}
		}
		
		/**
		 * 移除所有加载完成回调方法 
		 * 
		 */		
		public function removeAllCompleteFunc():void
		{
			_completeFuncList.length = 0;
		}		
		

		//==========================
		/**
		 * 加载结束时间 
		 */
		public function get endTime():int
		{
			return _endTime;
		}

		/**
		 * @private
		 */
		public function set endTime(value:int):void
		{
			_endTime = value;
		}

		/**
		 * 加载开始时间 
		 */
		public function get startTime():int
		{
			return _startTime;
		}

		/**
		 * @private
		 */
		public function set startTime(value:int):void
		{
			_startTime = value;
		}

		/**
		 * 加载优先级
		 */
		public function get priority():int
		{
			return _priority;
		}

		/**
		 * @private
		 */
		public function set priority(value:int):void
		{
			_priority = value;
		}
		
		//---------------------------------------------------------------------
		//  getter
		//---------------------------------------------------------------------
		/**
		 *	整个文件加载耗费的时间 (ms)
		 */
		public function get loadTime():int
		{
			return _endTime - _startTime;
		}
		
		public function get completeFuncList():Vector.<Function>
		{
			return _completeFuncList.concat();
		}

		//============const=================
		//--type
		/** xml文件  */	
		public static const TYPE_XML:String = "xml";
		/** json文件 */		
		public static const TYPE_JSON:String = "json";
		/** 图片文件 */		
		public static const TYPE_IMG:String = "img";
		/** 声音文件 */		
		public static const TYPE_SOUND:String = "sound";
		/** 二进制流 */		
		public static const TYPE_BIN:String = "bin";
		/**  swf   */
		public static const TYPE_SWF:String = "swf";
		/**  sheet   */
		public static const TYPE_SHEET:String = "sheet";
		/**  ui   */
		public static const TYPE_UI:String = "ui";
		//--status
		//加载状态
		/** 加载状态： 已加载完成*/
		public static const STATUS_LOADED:String = "loaded";
		/** 加载状态： 正在载入中*/
		public static const STATUS_LOADING:String = "loading";
		/** 加载状态： 未载入的*/
		public static const STATUS_NOT_LOADED:String = "notLoaded";
	}
}